package com.minimalist.common.entity.lindi.po;

import com.minimalist.common.config.mybatis.InsertFullColumnHandler;
import com.minimalist.common.config.mybatis.UpdateFullColumnHandler;
import com.minimalist.common.config.mybatis.bo.BaseEntity;
import com.mybatisflex.annotation.Table;

import java.io.Serial;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.Objects;

/**
 * 林地指标交易平台_补贴申请交易通知 实体类。
 *
 * @author 11987
 * @since 2025-07-06
 */
@Table(value = "LINDI_SUBSIDY_APPLICATION_PAY_NOTICE", onInsert = InsertFullColumnHandler.class, onUpdate = UpdateFullColumnHandler.class)
public class LindiSubsidyApplicationPayNotice extends BaseEntity implements Serializable{

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 补贴申请ID
     */
    private Long subsidyApplicationId;

    /**
     * 支付通知ID
     */
    private Long subsidyApplicationPayNoticeId;

    /**
     * 通知时间
     */
    private Timestamp noticeDate;

    /**
     * 支付通知标题
     */
    private String payTitle;

    /**
     * 支付说明
     */
    private String payExplain;

    /**
     * 备注
     */
    private String remark;

    /**
     * 文件列表，文件ID以,分割
     */
    private String fileList;

    public LindiSubsidyApplicationPayNotice(){
    }

    public LindiSubsidyApplicationPayNotice(Long subsidyApplicationId, Long subsidyApplicationPayNoticeId, Timestamp noticeDate, String payTitle, String payExplain, String remark, String fileList){
        this.subsidyApplicationId = subsidyApplicationId;
        this.subsidyApplicationPayNoticeId = subsidyApplicationPayNoticeId;
        this.noticeDate = noticeDate;
        this.payTitle = payTitle;
        this.payExplain = payExplain;
        this.remark = remark;
        this.fileList = fileList;
    }

    public Long getSubsidyApplicationId(){
        return subsidyApplicationId;
    }

    public void setSubsidyApplicationId(Long subsidyApplicationId){
        this.subsidyApplicationId = subsidyApplicationId;
    }

    public Long getSubsidyApplicationPayNoticeId(){
        return subsidyApplicationPayNoticeId;
    }

    public void setSubsidyApplicationPayNoticeId(Long subsidyApplicationPayNoticeId){
        this.subsidyApplicationPayNoticeId = subsidyApplicationPayNoticeId;
    }

    public Timestamp getNoticeDate(){
        return noticeDate;
    }

    public void setNoticeDate(Timestamp noticeDate){
        this.noticeDate = noticeDate;
    }

    public String getPayTitle(){
        return payTitle;
    }

    public void setPayTitle(String payTitle){
        this.payTitle = payTitle;
    }

    public String getPayExplain(){
        return payExplain;
    }

    public void setPayExplain(String payExplain){
        this.payExplain = payExplain;
    }

    public String getRemark(){
        return remark;
    }

    public void setRemark(String remark){
        this.remark = remark;
    }

    public String getFileList(){
        return fileList;
    }

    public void setFileList(String fileList){
        this.fileList = fileList;
    }

    @Override
    public boolean equals(Object o){
        if (this == o){
            return true;
        }
        if (o == null || getClass() != o.getClass()){
            return false;
        }
        if (!super.equals(o)){
            return false;
        }
        LindiSubsidyApplicationPayNotice that = (LindiSubsidyApplicationPayNotice) o;
        return Objects.equals(subsidyApplicationId, that.subsidyApplicationId) &&
                Objects.equals(subsidyApplicationPayNoticeId, that.subsidyApplicationPayNoticeId) &&
                Objects.equals(noticeDate, that.noticeDate) &&
                Objects.equals(payTitle, that.payTitle) &&
                Objects.equals(payExplain, that.payExplain) &&
                Objects.equals(remark, that.remark) &&
                Objects.equals(fileList, that.fileList);
    }

    @Override
    public int hashCode(){
        return Objects.hash(super.hashCode(), subsidyApplicationId, subsidyApplicationPayNoticeId, noticeDate, payTitle, payExplain, remark, fileList);
    }

    @Override
    public String toString(){
        return "LindiSubsidyApplicationPayNotice{" +
                "subsidyApplicationId=" + subsidyApplicationId +
                ", subsidyApplicationPayNoticeId=" + subsidyApplicationPayNoticeId +
                ", noticeDate=" + noticeDate +
                ", payTitle='" + payTitle + '\'' +
                ", payExplain='" + payExplain + '\'' +
                ", remark='" + remark + '\'' +
                ", fileList='" + fileList + '\'' +
                "} " + super.toString();
    }

    public static Builder builder(){
        return new Builder();
    }

    public static class Builder{
        private Long subsidyApplicationId;
        private Long subsidyApplicationPayNoticeId;
        private Timestamp noticeDate;
        private String payTitle;
        private String payExplain;
        private String remark;
        private String fileList;

        public Builder subsidyApplicationId(Long subsidyApplicationId){
            this.subsidyApplicationId = subsidyApplicationId;
            return this;
        }

        public Builder subsidyApplicationPayNoticeId(Long subsidyApplicationPayNoticeId){
            this.subsidyApplicationPayNoticeId = subsidyApplicationPayNoticeId;
            return this;
        }

        public Builder noticeDate(Timestamp noticeDate){
            this.noticeDate = noticeDate;
            return this;
        }

        public Builder payTitle(String payTitle){
            this.payTitle = payTitle;
            return this;
        }

        public Builder payExplain(String payExplain){
            this.payExplain = payExplain;
            return this;
        }

        public Builder remark(String remark){
            this.remark = remark;
            return this;
        }

        public Builder fileList(String fileList){
            this.fileList = fileList;
            return this;
        }

        public LindiSubsidyApplicationPayNotice build(){
            return new LindiSubsidyApplicationPayNotice(subsidyApplicationId, subsidyApplicationPayNoticeId, noticeDate, payTitle, payExplain, remark, fileList);
        }
    }

}
